Форум dkLab и Denwer
Здесь общаются Web-разработчики.
Генеральный спонсор:
Хостинг «Джино»

DbSimple и MySQL. Вопрос по кэшированию (xBB)
Author Message
xBB
Участник форума



Joined: 17 Aug 2007
Posts: 21
Карма: 0
   поощрить/наказать

Location: Ташкент

PostPosted: Fri Aug 17, 2007 12:17 pm (написано за 5 минут 4 секунды)
   Post subject: DbSimple и MySQL. Вопрос по кэшированию
Reply with quote

Начал использовать DbSimple в своем проекте. Очень удобно. Большое спасибо за хорошую либу. По ходу дела возник вопрос.

Я использую MySQL с включенным кэшированием запросов. Есть ли в этом случае какой нибудь смысл использовать средства DbSimple для кэширования в "зависимости от источников данных"?

Ведь такая фича может оказаться кэшированием кэша. Кто как поступал в таких случаях?
Back to top
View user's profile Send private message Send e-mail
xBB
Участник форума



Joined: 17 Aug 2007
Posts: 21
Карма: 0
   поощрить/наказать

Location: Ташкент

PostPosted: Fri Aug 17, 2007 5:18 pm (спустя 5 часов 1 минуту; написано за 2 минуты 5 секунд)
   Post subject:
Reply with quote

Сам ответил на свой вопрос. Вот тест:
Code (php): скопировать код в буфер обмена
<?php
error_reporting (www.php.net/error_reporting)(E_ALL);
require_once './DbSimple/Generic.php';
$DB = DbSimple_Generic::connect('Mysql://Логин:Пароль@Хост/База');

// Кэш-хранилище
$cach = array (www.php.net/array)();
$DB->setCacher('myCacher');

function myCacher($key, $value)
{
    global (www.php.net/global) $cach;
    if (null !== $value) {
        $cach[$key] = $value;
    } else {
        return isset (www.php.net/isset)($cach[$key]) ? $cach[$key] : null;
    }
}

// Возвращает текущий UNIX timestamp с микросекундами в формате float
function getmicrotime()
{
    list($usec, $sec) = explode (www.php.net/explode)(' ', microtime (www.php.net/microtime)());
    return (float) $usec + (float) $sec;
}

// Тестовая функция. $query_num - число запросов

function test($query_num)
{
    global (www.php.net/global) $DB;
    $result = array (www.php.net/array)();
   
    // Тест с кэшированием
    $time_start = getmicrotime();
    $sql = ' -- CACHE: test.edit_time
        SELECT * FROM test ORDER BY NAME'
;
    for ($i = 0; $i < $query_num; ++$i) {
        $DB->select($sql);
    }
    $result[] = getmicrotime() - $time_start;

    // Тест без кэширования
    $time_start = getmicrotime();
    $sql = 'SELECT * FROM test ORDER BY NAME';
    for ($i = 0; $i < $query_num; ++$i) {
        $DB->select($sql);
    }
    $result[] = getmicrotime() - $time_start;

    return $result;
}

// Создаем тестовую таблицу

$sql = 'DROP TABLE IF EXISTS test';
$DB->query($sql);

$sql = 'CREATE TABLE test (
    id INT AUTO_INCREMENT PRIMARY KEY,
    name VARCHAR(100),
    edit_time TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
    INDEX (edit_time)
    )'
;
$DB->query($sql);

for ($i = 0; $i < 100; ++$i) {
    $sql = 'INSERT INTO test (name, edit_time) VALUE (?, NOW())';
    $DB->query($sql, md5 (www.php.net/md5)(rand (www.php.net/rand)()));
}

// Тест на 10 запросов
$result = test(10);
echo (www.php.net/echo) '10 запросов с кэшированием: ' . $result[0] . ' сек.<br />';
echo (www.php.net/echo) '10 запросов без кэширования: ' . $result[1] . ' сек.<br />&nbsp;<br />';


// Тест на 1000 запросов
$result = test(1000);
echo (www.php.net/echo) '1000 запросов с кэшированием: ' . $result[0] . ' сек.<br />';
echo (www.php.net/echo) '1000 запросов без кэширования: ' . $result[1] . ' сек.<br />';
Вот результат:

10 запросов с кэшированием: 0.00926804542542 сек.
10 запросов без кэширования: 0.0164940357208 сек.
 
1000 запросов с кэшированием: 0.863590955734 сек.
1000 запросов без кэширования: 1.78387713432 сек.

Правда, кэш у меня в тесте очень быстрый :) Надо будет еще на реальном проверить
Back to top
View user's profile Send private message Send e-mail
Константин Жинько [tIT]
Сотрудник «Лаборатории»



Joined: 12 Jun 2004
Posts: 2264
Карма: 106
   поощрить/наказать

Location: Москва

PostPosted: Fri Sep 28, 2007 12:53 pm (спустя 1 месяц 10 дней 19 часов 34 минуты; написано за 54 секунды)
   Post subject:
Reply with quote

xBB
На реальном я memcached использую - круче механизма еще не видел. Одна беда - оперативной памяти вагон должен быть (-;
Back to top
View user's profile Send private message
Display posts from previous:   
Post new topic   Reply to topic All times are GMT + 3 Hours
Page 1 of 1    Email to a Friend.
You cannot post new topics in this forum. You cannot reply to topics in this forum. You cannot edit your posts in this forum. You cannot delete your posts in this forum. You cannot vote in polls in this forum. You cannot attach files in this forum. You can download files in this forum.
XML